#include <iostream>
#include <string>

using std::cin;
using std::cout;
using std::endl;
using std::string;

int main()
{
    // 下面演示了使用string类的定义和初始化
    /* 使用默认构造函数，得到的string将是一个空字符串 */
    string str1;
    /* 拷贝初始化，使用 = 的是拷贝初始化*/
    string str2 = "Hello, World!";

    /* 直接初始化 */
    string str6("Hello, World!");

    /* 使用赋值运算符，实际上调用的是拷贝构造函数 */
    string str3 = str2;

    /* 定义一个长度确定，且每个字符都一样的string类对象 */
    /* 此方式也是之间初始化 */
    string str4(10, 'a'); // str4被初始化为"aaaaaaaaaa"

    /* 使用迭代器初始化 */
    string str5(str2.begin(), str2.end());

    /* 使用c_str()函数初始化 */
    string str7 = str2.c_str();

    /* 使用substr()函数初始化 */
    string str8 = str2.substr(0, 5); // str8被初始化为"Hello"

    /* -------------------------------------------------------- */
    // 下面演示了string类的常用操作
    /* 使用+运算符 */
    string str9 = str2 + " I am here!";
    /* 使用+=运算符 */
    str9 += " I am here!";
    /* 使用append()函数 */
    str9.append(" I am here!");
    /* 使用insert()函数 */
    str9.insert(5, " I am here!");
    /* 使用replace()函数 */
    str9.replace(5, 5, " I am here!");
    /* 使用erase()函数 */
    str9.erase(5, 5);
    /* 使用find()函数 */
    cout << str9.find("I am") << endl;
    /* 使用rfind()函数 */
    cout << str9.rfind("I am") << endl;
    /* 使用compare()函数 */
    cout << str9.compare("Hello, World! I am here!") << endl;
    /* 使用substr()函数 */
    cout << str9.substr(0, 5) << endl;
    /* 使用size()函数 */
    cout << str9.size() << endl;

    string str10;
    getline(cin, str10);
    cout << "string10: " << str10 << endl;
    str10.operator+=(" I am here!");
    cout << "string10: " << str10 << endl;
    str10 += " I am here!";
    cout << "string10: " << str10 << endl;
    cout << " " << (str10.size() < -1) << endl;
    return 0;
}